import AppConsts from './appconst.js';
import Util from './util.js';
import Request from '../common/http/request.js';
import store from '../store'

const http = new Request();
http.setConfig((config) => { /* 设置全局配置 */
	config.baseUrl = AppConsts.remoteServiceBaseUrl /* 根域名不同 */
	return config
})
http.interceptor.request((config, cancel) => { /* cancel 为函数，如果调用会取消本次请求。需要注意：调用cancel,本次请求的catch仍会执行。必须return config */
	config.header = {
		...config.header
	}
	if (!!store.state.common.regionId && config.method.toUpperCase() == 'GET') {
		config.params["regionId"] = store.state.common.regionId;
	}
	if (!!store.state.common.city && !!store.state.common.city.id && config.method.toUpperCase() == 'GET') {
		config.params["cityId"] = store.state.common.city.id;
	}
	let authToken = Util.getToken();
	if (!!authToken) {
		config.header["Authorization"] = "Bearer " + authToken;
	}

	// if (!authToken) { // 如果token不存在，调用cancel 会取消本次请求，但是该函数的catch() 仍会执行
	// 	cancel('token 不存在', config) //  把修改后的config传入，之后响应就可以拿到修改后的config。 如果调用了cancel但是不传修改后的config，则catch((err) => {}) err.config 为request拦截器修改之前的config
	// }

	return config;
})
http.interceptor.response((response) => { /* 请求之后拦截器 */
	return response
}, (error) => { // 请求错误做点什么
	if (!!error && !!error.data && !!error.data.error && !!error.data.error.message && error.data.error
		.details) {
		uni.showModal({
			title: error.data.error.message,
			content: error.data.error.details
		})
	} else if (!!error && !!error.data && !!error.data.error && !!error.data.error.message) {
		uni.showModal({
			title: '提示信息',
			content: error.data.error.message
		})
	} else if (!error) {
		uni.showModal({
			title: '提示信息',
			content: "未知错误!"
		});
	}
	return Promise.reject(error);
})

export default http;